/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.recursos.controlador;

import com.recursos.beans.DataBaseHelper;
import com.recursos.beans.FacadeReservaRecurso;
import com.recursos.entidades.EstadoPrestamo;
import com.recursos.entidades.EstadoRecurso;
import com.recursos.entidades.Recurso;
import com.recursos.entidades.Reserva;
import com.recursos.entidades.TipoRecurso;
import com.recursos.entidades.Usuario;
import com.recursos.modelo.DatosUsuario;
import com.recursos.view.utilidades.Log;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.validator.ValidatorException;

/**
 *
 * @author MARA
 */
@ManagedBean(name = "accionesReserva")
@ViewScoped
public class AccionesReserva extends Log implements Serializable {

    @EJB
    private DataBaseHelper dataBase;
    @EJB
    private FacadeReservaRecurso facade;
    private Reserva reservaSelect = new Reserva();
    private List<Recurso> listRecurso;
    private Recurso recursoSelect;
    private List<TipoRecurso> listTipoRecurso;
    private DatosUsuario datos;
    private String tipoBusqueda;
    private String valorBusqueda;

    public AccionesReserva() {
        datos = (DatosUsuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
                .get(ControladorLogin.USER_SESSION_KEY);
        
    }

    public List<TipoRecurso> getListTipoRecurso() {
        listTipoRecurso = dataBase.getList(datos, TipoRecurso.class);
        return listTipoRecurso;
    }

    public void setListTipoRecurso(List<TipoRecurso> listTipoRecurso) {
        this.listTipoRecurso = listTipoRecurso;
    }

    public Reserva getReservaSelect() {
        return reservaSelect;
    }

    public void setReservaSelect(Reserva reservaSelect) {
        this.reservaSelect = reservaSelect;
    }

    public List<Recurso> getListRecurso() {
        return listRecurso;
    }

    public void setListRecurso(List<Recurso> listRecurso) {
        this.listRecurso = listRecurso;
    }

    public Recurso getRecursoSelect() {
        return recursoSelect;
    }

    public void setRecursoSelect(Recurso recursoSelect) {
        this.recursoSelect = recursoSelect;
    }

    public String getTipoBusqueda() {
        return tipoBusqueda;
    }

    public void setTipoBusqueda(String tipoBusqueda) {
        this.tipoBusqueda = tipoBusqueda;
    }

    public String getValorBusqueda() {
        return valorBusqueda;
    }

    public void setValorBusqueda(String valorBusqueda) {
        this.valorBusqueda = valorBusqueda;
    }
    
    

    public void guardar(ActionEvent actionEvent) {
        FacesContext context = FacesContext.getCurrentInstance();
        FacesMessage msg = null;
      
            if(reservaSelect.getFechaIni().before(reservaSelect.getFechaFin())){
            Usuario u = (Usuario) dataBase.findById(datos, Usuario.class, datos.getIdUsuario());
            EstadoPrestamo estado = (EstadoPrestamo) dataBase.findById(datos, EstadoPrestamo.class, "1");            
            reservaSelect.setIdUsuario(u);
            reservaSelect.setEstado(estado);
            Recurso r = (Recurso) dataBase.findById(datos, Recurso.class, recursoSelect.getIdRecurso().toString());
            EstadoRecurso estadoRec = (EstadoRecurso) dataBase.findById(datos,EstadoRecurso.class, "2");
            
            r.setIdEstado(estadoRec);
            dataBase.save(datos, r);
            reservaSelect.setIdElemento(recursoSelect);
            dataBase.create(datos, reservaSelect);
            
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Mensaje","Se realizo la reseva correctamente");
            }else{
                 FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error ", "La fecha inicial no puede ser mayor a la final");
                throw new ValidatorException(message);
            }
       
        
        context.addMessage(null, msg);
    }

    public void buscar(ActionEvent actionEvent) {
        FacesContext context = FacesContext.getCurrentInstance();
        FacesMessage msg = null;
        boolean banderaId = false;
        try {
            if ("id".equals(tipoBusqueda)) {
                listRecurso = dataBase.findByIdList(datos, Recurso.class, valorBusqueda);
                banderaId = true;
            } else {
                if ("nombre".equals(tipoBusqueda)) {
                    listRecurso = facade.listFinByName(datos, "1", valorBusqueda);
                } else {
                    if ("tipo".equals(tipoBusqueda)) {
                        listRecurso = facade.listFinByName(datos, "1", valorBusqueda);
                    }
                }
            }
            if (!banderaId) {
                if (listRecurso == null || listRecurso.isEmpty()) {
                    msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje", "No se genero ningun resultado");
                } else {
                    msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje", "Consulta realizada con exito");
                }
            }else{
                if(!listRecurso.isEmpty()){
                    if(listRecurso.get(0).getIdEstado().getIdEstado().toString().equals("2")){
                        msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Mensaje", "El recurso se encuetra en estado "
                                + listRecurso.get(0).getIdEstado().getDescripcion());
                        listRecurso.remove(0);
                    }else{
                         msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje", "Consulta realizada con exito");
                    }
                }else{
                     msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje", "No se genero ningun resultado");
                }
            }
        } catch (Exception ex) {
            loggerD.error("Error buscar: " + ex.getMessage());
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Alerta", "No se pudo finalizar la busqueda");
        }
        context.addMessage(null, msg);

    }
    
}
